package com.kukudexin;

/**
 * @author: 酷酷的鑫
 * @Date: 2021/8/5 18:35
 * @description:
 */
public class Test05 {
    public static void main(String[] args) {
//        Integer[] numArray1 = {1,2,3,4,5};
//        //创建Calculate对象,通过泛型指定Integer类型, 构造方法就需要传递Integer[]数组
//        Calculate<Integer> obj = new Calculate<>(numArray1);
//        obj.avg();

        //创建Calculate对象,指定泛型为Double,则构造方法需要传递Double[]数组
//        Double[] numArray2 = {1.1, 2.2, 3.3 , 4.4 , 5.5 };
//        Calculate<Double > obj2 = new Calculate<>(numArray2);
//        obj2.avg();

        //创建Calculate对象时, 传递String泛型,语法错误,在定义Calculate类时,泛型只能是Number类或者它的子类
//        Calculate<String> obj3;

        //创建Calculate对象时,如果不指定泛型, 则默认为泛型类的上界Number类型
        Number[] numArray3 = {12,5.5};
        Calculate obj4 = new Calculate( numArray3);
        obj4.avg();

    }

    static class Calculate<T extends Number>{       //指定T类型是Number类或者它的子类
        //使用泛型类型定义数组,数组中想要存储一些数字,整数,小数等
        T [] array;

        //通过构造方法实现对array数组的赋值
        public Calculate(T[] array) {
            this.array = array;
        }

        //提供方法,计算数组中各个元素的平均值
        public void avg(){
            //把array数组中各个元素进行累加,再平均
            double sum = 0 ;    //保存累加和
            for (int i = 0; i < array.length; i++) {
                System.out.println("==============>" + array[i].getClass().getSimpleName());
                sum += array[i].intValue();
            }
            System.out.println("数组元素平均值为:" + sum/array.length);
        }
    }


}
